home *** CD-ROM | disk | FTP | other *** search
- #!/bin/bash
- #
- # WebHTTrack launcher script
- # Initializes the htsserver GUI frontend and launch the default browser
-
- BROWSEREXE=
- SRCHBROWSEREXE="x-www-browser www-browser mozilla firefox firebird galeon konqueror opera netscape"
- if test -n "${BROWSER}"; then
- # sensible-browser will f up if BROWSER is not set
- SRCHBROWSEREXE="sensible-browser ${SRCHBROWSEREXE}"
- fi
- SRCHPATH="/usr/local/bin /usr/share/bin /usr/bin /usr/lib/httrack /usr/local/lib/httrack /usr/local/share/httrack /sw/bin ${HOME}/usr/bin ${HOME}/bin"
- SRCHPATH="$SRCHPATH "`echo $PATH | tr ":" " "`
- SRCHDISTPATH="/usr/share /usr/local /usr /local /usr/local/share ${HOME}/usr ${HOME}/usr/share /sw ${HOME}/usr/local ${HOME}/usr/share"
-
- ###
- # And now some famous cuisine
-
- function log {
- echo "$0($$): $@" >&2
- return 0
- }
-
- function mozillabrowser {
- # returns 0, if the browser is mozilla type
- echo "$1" | grep -q "mozilla"
- [ $? -eq 0 ] && return 0
- echo "$1" | grep -q "netscape"
- [ $? -eq 0 ] && return 0
- echo "$1" | grep -q "firebird"
- [ $? -eq 0 ] && return 0
- echo "$1" | grep -q "firefox"
- [ $? -eq 0 ] && return 0
- return 1;
- }
- function mozillaloaded {
- user_name=`logname 2>/dev/null`
- if ! test -n "${user_name}"; then
- user_name=`id -un`
- fi
- if test -n "${user_name}"; then
- ps -e --user "$user_name" | grep -qE "(mozilla|netscape|firebird|firefox)"
- else
- false
- fi
- }
-
- function launch_browser {
- log "launching $1"
- start_t=`date +%s`
- browser=$1
- url=$2
- moz=
- if mozillaloaded; then
- moz=1
- fi
- # launch any browser
- # if it is a mozilla like browser, check if the browser is running and use
- # -remote if needed. Change the URL into openURL($url) too.
- # (thanks to Torsten Werner for the patch)
- # see http://www.mozilla.org/unix/remote.html
- # 04/2006: openurl() fix from Samuel Suther
- if mozillabrowser ${browser}; then
- if ! ${browser} -remote "openurl(${url})"; then
- log "spawning browser.."
- ${browser} "${url}"
- fi
- else
- log "spawning regular browser.."
- ${browser} "${url}"
- fi
- # this is a real pain in the neck: browser can hiddenly use the -remote feature of
- # mozilla and therefore return immediately
- # this loop is the only reliable solution AFAIK
- end_t=`date +%s`
- if test -n "$start_t" -a -n "$end_t"; then
- int_t=$[$end_t-$start_t]
- else
- int_t=0
- fi
- if test -n "${int_t}" -a "${int_t}" -lt 60; then
- if test -n "$moz"; then
- log "waiting for browser to terminate.."
- while mozillaloaded; do
- sleep 3
- done
- log "browser seems to have been closed.."
- fi
- fi
- log "browser exited"
- }
-
- # First ensure that we can launch the server
- BINPATH=
- for i in ${SRCHPATH}; do
- ! test -n "${BINPATH}" && test -x ${i}/htsserver && BINPATH=${i}
- done
- for i in ${SRCHDISTPATH}; do
- ! test -n "${DISTPATH}" && test -f "${i}/httrack/lang.def" && DISTPATH="${i}/httrack"
- done
- test -n "${BINPATH}" || ! log "could not find htsserver" || exit 1
- test -n "${DISTPATH}" || ! log "could not find httrack directory" || exit 1
- test -f ${DISTPATH}/lang.def || ! log "could not find ${DISTPATH}/lang.def" || exit 1
- test -f ${DISTPATH}/lang.indexes || ! log "could not find ${DISTPATH}/lang.indexes" || exit 1
- test -d ${DISTPATH}/lang || ! log "could not find ${DISTPATH}/lang" || exit 1
- test -d ${DISTPATH}/html || ! log "could not find ${DISTPATH}/html" || exit 1
-
- # Locale
- HTSLANG="${LC_MESSAGES}"
- ! test -n "${HTSLANG}" && HTSLANG="${LC_ALL}"
- ! test -n "${HTSLANG}" && HTSLANG="${LANG}"
- test -n "${HTSLANG}" && HTSLANG="`echo ${HTSLANG} | cut -c1-2` | tr 'A-Z' 'a-z'"
- LANGN=`grep "${HTSLANG}:" ${DISTPATH}/lang.indexes | cut -f2 -d':'`
- ! test -n "${LANGN}" && LANGN=1
-
- # Find the browser
- # note: not all systems have sensible-browser or www-browser alternative
- # thefeore, we have to find a bit more if sensible-browser could not be found
-
- for i in ${SRCHBROWSEREXE}; do
- for j in ${SRCHPATH}; do
- if test -x ${j}/${i}; then
- BROWSEREXE=${j}/${i}
- fi
- test -n "$BROWSEREXE" && break
- done
- test -n "$BROWSEREXE" && break
- done
- test -n "$BROWSEREXE" || ! log "cound not find any suitable browser" || exit 1
-
- # "browse" command
- if test "$1" = "browse"; then
- if test -f "${HOME}/.httrack.ini"; then
- INDEXF=`cat ${HOME}/.httrack.ini | tr '\r' '\n' | grep -E "^path=" | cut -f2- -d'='`
- if test -n "${INDEXF}" -a -d "${INDEXF}" -a -f "${INDEXF}/index.html"; then
- INDEXF="${INDEXF}/index.html"
- else
- INDEXF=""
- fi
- fi
- if ! test -n "$INDEXF"; then
- INDEXF="${HOME}/websites/index.html"
- fi
- launch_browser "${BROWSEREXE}" "file://${INDEXF}"
- exit $?
- fi
-
- # Create a temporary filename
- TMPSRVFILE="/tmp/.webhttrack.$$.`head -c16 /dev/random | md5sum | cut -f1 -d' '`"
- >${TMPSRVFILE} || ! log "cound not create the temporary file ${TMPSRVFILE}" || exit 1
- # Launch htsserver binary and setup the server
- (${BINPATH}/htsserver "${DISTPATH}/" path "${HOME}/websites" lang "${LANGN}" $@; echo SRVURL=error) > ${TMPSRVFILE}&
- # Find the generated SRVURL
- SRVURL=
- MAXCOUNT=60
- while ! test -n "$SRVURL"; do
- MAXCOUNT=$[$MAXCOUNT - 1]
- test $MAXCOUNT -gt 0 || exit 1
- test $MAXCOUNT -lt 50 && echo "waiting for server to reply.."
- SRVURL=`grep -E URL= ${TMPSRVFILE} | cut -f2- -d=`
- test ! "$SRVURL" = "error" || ! log "could not spawn htsserver" || exit 1
- test -n "$SRVURL" || sleep 1
- done
-
- # Cleanup function
- function cleanup {
- test -n "$1" && log "nasty signal caught, cleaning up.."
- test -f ${TMPSRVFILE} && SRVPID=`grep -E PID= ${TMPSRVFILE} | cut -f2- -d=`
- test -n "${SRVPID}" && kill -9 ${SRVPID}
- test -f ${TMPSRVFILE} && rm ${TMPSRVFILE}
- test -n "$1" && log "..done"
- return 0
- }
-
- # Cleanup in case of emergency
- trap "cleanup now; exit" 1 2 3 4 5 6 7 8 9 11 13 14 15 16 19 24 25
-
- # Got SRVURL, launch browser
- launch_browser "${BROWSEREXE}" "${SRVURL}"
-
- # That's all, folks!
- trap "" 1 2 3 4 5 6 7 8 9 11 13 14 15 16 19 24 25
- cleanup
- exit 0
-